package com.wy._05Random;



/**
 * @author 吴宇~
 * @motto 我亦无他，唯手熟尔。
 * @edition jdk1.8
 * @reflection 0-1 喧闹任其喧闹，自由我自为之，我自风情万种，与世无争。
 * @date 2023/04/02/12:56
 */
public class Conversion {
    /**
     * 这个类的功能目前太简单了，但是吧，还是可以增强的，主要是自己写的啊，加油
     * 显示数组的话使用Arrays.toString(object)方法实现，这个类的方法规规矩矩的显示了
     */

    /**
     * @param in 传入ASCII码
     * @return 返回char字符
     */
    public static char IntConversionChar(int in) {
        if (in >= 0) {
            return (char) in;
        }
        System.out.println("请输入正确转换数字！");
        throw new RuntimeException("随便抛个异常吧");
    }

    /**
     * @param cr 传入char字符
     * @return 返回ASCII码值
     */ //这个和上面是不是可以做一个方法重载
    public static int CharConversionInt(char cr) {
        return (int) cr;
    }

    /**
     * @param a 起点
     * @param b 重终点
     * @return 返回 a 到 b ASCII对应的字符，包含a和b
     */
    public static char[] IntsConversionCharGroup(int a, int b) {
        if (a > b) {
            System.out.println("看看顺序是不是不对！");
            throw new RuntimeException("随便抛一个异常吧");
        }
        int c = a;
        char[] chars = new char[b - a + 1];
        for (int i = 0; i < b - a + 1; i++, c++) {
            chars[i] = (char) c;
        }
        return chars;
    }

    /**
     * @param chars 传入char字符串数组
     * @return 返回ASCII数组
     */
    public static int[] charGroupConversionIntGroup(char[] chars) {
        judgeNull(chars);
        int[] ints = new int[chars.length];
        for (int i = 0; i < chars.length; i++) {
            ints[i] = CharConversionInt(chars[i]);
        }
        return ints;
    }

    /**
     * @param ints 传入ASCII数组
     * @return 返回char字符数组
     */
    public static char[] intGroupConversionCharGroup(int[] ints) {
        judgeNull(ints);
        char[] chars = new char[ints.length];
        for (int i = 0; i < ints.length; i++) {
            chars[i] = IntConversionChar(ints[i]);
        }
        return chars;

    }

    /**
     * @param str 传入字符串
     * @return 返回ASCII数组
     */
    public static int[] StringConversionIntGroup(String str) {
        if (str == null) {
            System.out.println("闹甚了伙计闹个空的糊弄人，送你个异常");
            throw new RuntimeException("注意啊，不要hai dai！");
        }
        judgeNull(str);
        int[] ints = new int[str.length()];
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            ints[i] = (int) chars[i];
        }
        return ints;
    }

    /**
     * @param ints 传入ASCII数组
     * @return 返回String字串
     * 用于把某段数字翻译成中文
     */
    public static String intGroupConversionString(int[] ints) {
        judgeNull(ints);
        char[] chars = intGroupConversionCharGroup(ints);
        return new String(chars);
    }

    /**
     * @param str 传入String字符串
     * @return 返回char字符数组
     */
    public static char[] StringConversionCharGroup(String str) {
        judgeNull(str);
        return str.toCharArray();
    }

    /**
     * @param ch 传入char字符数组
     * @return 返回String字符串
     */
    public static String CharGroupConversionString(char[] ch) {
        judgeNull(ch);
        return new String(ch);
    }

    /**
     * @param obj 判断是否为空
     */
    public static void judgeNull(Object obj) {
        if (obj == null) {
            throw new RuntimeException("空的东西就不要来捉糊人");
        }
    }


    /**
     * 生成随机位数的验证码
     * @param n  n为位数
     * @return 返回值为字符串
     */
    public static String randomTest(int n) {
        int[] ints = new int[n];
        for (int i = 0; i < ints.length; i++) {
            ints[i]=(int) (48 + (Math.random() * 10));
        }
        return new String(intGroupConversionCharGroup(ints));
    }
}
